package com.lijy.awt;

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.Vector;

/**
 * @author Lijingyu on 2017/10/19.
 */
public class DynamicEvents extends Frame {

    Vector v = new Vector();
    int i = 0;
    Button
            b1 = new Button("Button 1"),
            b2 = new Button("Button 2");

    public DynamicEvents() {
        setLayout(new FlowLayout());
        b1.addActionListener(new B());
        b1.addActionListener(new B1());
        add(b1);
        b2.addActionListener(new B());
        b2.addActionListener(new B2());
        add(b2);


    }

    public static void main(String[] args) {
        Frame f = new DynamicEvents();
        f.addWindowListener(
                new WindowAdapter() {
                    public void windowClosing(WindowEvent e){
                        System.exit(0);
                    }
                });
        f.setSize(300,200);
        f.show();
    }


    private class B implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            System.out.println("A button was pressed");
        }
    }

    private class B1 implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            System.out.println("Button 1 pressed");
            ActionListener a = new CountListener(i++);
            v.addElement(a);
            b2.addActionListener(a);
        }
    }

    private class CountListener implements ActionListener {
        int index;
        public CountListener(int i) { index = i;}

        public void actionPerformed(ActionEvent e) {
            System.out.println("Counted Listener " + index);
        }
    }

    private class B2 implements ActionListener {
        public void actionPerformed(ActionEvent e) {
            System.out.println("Button 2 pressed");
            int end = v.size() - 1;
            if(end >= 0) {
                b2.removeActionListener((ActionListener)v.elementAt(end));
                v.removeElementAt(end);
            }
        }
    }

}
